#include "led.h"

uint8_t LED_blink_tpye=0;
uint16_t out_led_idx_1=0;
uint16_t next_ms_1=0;
uint8_t show_step_1=0;

void Init_LED(void)
{
  GPIO_Init(RED_GPIO_PORT, RED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);	
  GPIO_Init(GRE_GPIO_PORT, GRE_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);	
  GPIO_Init(BLU_GPIO_PORT, BLU_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);	
  GPIO_WriteHigh(RED_GPIO_PORT, RED_GPIO_PINS);
  GPIO_WriteHigh(GRE_GPIO_PORT, GRE_GPIO_PINS);
  GPIO_WriteHigh(BLU_GPIO_PORT, BLU_GPIO_PINS);
}

uint8_t last_tp_arm=0;
void Set_Led_Type(uint8_t tp)
{
	LED_blink_tpye=tp;
	if(LED_blink_tpye!=last_tp_arm)
	{
		out_led_idx_1=0;
		next_ms_1=0;
		show_step_1=0;
	}
	last_tp_arm=LED_blink_tpye;
}

void Set_Board_Led(uint8_t b)
{
  if(b)
    GPIO_WriteLow(BLU_GPIO_PORT, BLU_GPIO_PINS);
  else
    GPIO_WriteHigh(BLU_GPIO_PORT, BLU_GPIO_PINS);
}

void LED_control(void)  //  in 100ms loop
{
	switch(LED_blink_tpye)
	{
		case 0:
		{
			Set_Board_Led(0);
		}break;
		case 1:
		{
			out_led_idx_1++;
			if(out_led_idx_1>=next_ms_1)
			{
				switch(show_step_1)
				{
				case 0:	show_step_1=1;	next_ms_1=80;Set_Board_Led(1);break;//
				case 1:	show_step_1=0;	next_ms_1=800;Set_Board_Led(0);break;//
				}
				out_led_idx_1=0;
			}
		}break;
		case 2: //
		{
			out_led_idx_1++;
			if(out_led_idx_1>=next_ms_1)
			{
				switch(show_step_1)
				{
				case 0:	show_step_1=1;	next_ms_1=80;Set_Board_Led(1);break;//
				case 1:	show_step_1=2;	next_ms_1=320;Set_Board_Led(0);break;//
				case 2:	show_step_1=3;	next_ms_1=80;Set_Board_Led(1);break;//
				case 3:	show_step_1=0;	next_ms_1=800;Set_Board_Led(0);break;
				}
				out_led_idx_1=0;
			}
		}break;
		case 3: //
		{
			out_led_idx_1++;
			if(out_led_idx_1>=next_ms_1)
			{
				switch(show_step_1)
				{
				case 0:	show_step_1=1;	next_ms_1=80;Set_Board_Led(1);break;//
				case 1:	show_step_1=2;	next_ms_1=320;Set_Board_Led(0);break;//
				case 2:	show_step_1=3;	next_ms_1=80;Set_Board_Led(1);break;//
				case 3:	show_step_1=4;	next_ms_1=320;Set_Board_Led(0);break;//
				case 4:	show_step_1=5;	next_ms_1=80;Set_Board_Led(1);break;//
				case 5:	show_step_1=0;	next_ms_1=800;Set_Board_Led(0);break;
				}
				out_led_idx_1=0;
			}
		}break;
		case 4: //
		{
			out_led_idx_1++;
			if(out_led_idx_1>=next_ms_1)
			{
				switch(show_step_1)
				{
				case 0:	show_step_1=1;	next_ms_1=80;GPIO_WriteLow(RED_GPIO_PORT, RED_GPIO_PINS);break;//
				case 1:	show_step_1=2;	next_ms_1=320;GPIO_WriteHigh(RED_GPIO_PORT, RED_GPIO_PINS);break;//
				case 2:	show_step_1=3;	next_ms_1=80;GPIO_WriteLow(RED_GPIO_PORT, RED_GPIO_PINS);break;//
				case 3:	show_step_1=4;	next_ms_1=320;GPIO_WriteHigh(RED_GPIO_PORT, RED_GPIO_PINS);break;//
				case 4:	show_step_1=5;	next_ms_1=80;GPIO_WriteLow(RED_GPIO_PORT, RED_GPIO_PINS);break;//
				case 5:	show_step_1=6;	next_ms_1=320;GPIO_WriteHigh(RED_GPIO_PORT, RED_GPIO_PINS);break;//
				case 6:	show_step_1=7;	next_ms_1=80;GPIO_WriteLow(RED_GPIO_PORT, RED_GPIO_PINS);break;//
				case 7:	show_step_1=0;	next_ms_1=320;GPIO_WriteHigh(RED_GPIO_PORT, RED_GPIO_PINS);break;
				}
				out_led_idx_1=0;
			}
		}break;
		case 6: //
		{
			out_led_idx_1++;
			if(out_led_idx_1>=next_ms_1)
			{
				switch(show_step_1)
				{
				case 0:	show_step_1=1;	next_ms_1=100;Set_Board_Led(1);break;//
				case 1:	show_step_1=2;	next_ms_1=100;Set_Board_Led(0);break;//
				case 2:	show_step_1=3;	next_ms_1=100;Set_Board_Led(1);break;//
				case 3:	show_step_1=4;	next_ms_1=100;Set_Board_Led(0);break;//
				case 4:	show_step_1=5;	next_ms_1=100;Set_Board_Led(1);break;//
				case 5:	show_step_1=0;	next_ms_1=100;Set_Board_Led(0);break;
				}
				out_led_idx_1=0;
			}
		}break;
		default:break;
	}

}

